/*
 * @Author: your name
 * @Date: 2022-01-02 10:53:11
 * @LastEditTime: 2022-01-04 21:54:05
 * @LastEditors: your name
 * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 * @FilePath: /ac_interface/test/ssh2shell.js
 */
// let Client = require('ssh2').Client;
// let through = require('through');
// class SSH{
//     constructor(host, port=22, username, password){
//         this.ssh = null;
//         this.host = host;
//         this.port = port;
//         this.username = username;
//         this.password = password;
//     }

//     createSSH(then){
//         this.ssh = new Client();
//         let that = this;
//         this.ssh.on('ready', () => {
//             if(then)
//                 then();
//         }).on('error', (err) => {
//             console.log(this.host + 'error');
//         }).on('close', (had_error) => {
//             console.log(this.host + 'closed');
//         }).connect({
//             host: this.host,
//             port: this.port,
//             username: this.username,
//             password: this.password
//         });
//     }

//     exec(cmd, then) {
//         this.ssh.exec(cmd, (err, stream) => {
//             let data = "";
//             stream.pipe(through(function onWrite(buf) {
//                 data = data + buf;
//             }, function onEnd() {
//                 stream.unpipe();
//             }));
//             stream.on('close', function () {
//                 console.log(cmd);
//                 if(then){
//                     then(null, '' + data);
//                 }
//             });
//         });
//     }
// }

// console.log('start');
// let newSSH = new SSH('172.21.4.216', 22, 'root', 'Nibushiwo351351');
// newSSH.createSSH(() => {
//     console.log('start');
// });
// newSSH.exec('ls -a', (err, data) => {
//     if(err) {console.log('err');}
//     if(data) {console.log(data);}
// })

// var exec = require('node-ssh-exec');

// var config = {
//     host: '172.21.4.154',
//     username: 'root',
//     password: 'Nibushiwo351351'
// },
//     command = 'ls -alh';

// exec(config, command, function (err, res){
//     if(err){
//         throw err;
//     }
//     console.log(res);
// });


// let SSH2Promise = require('ssh2-promise');
// let fs = require('fs');

// let argv = process.argv;
// argv = argv.slice(2,argv.length);

// let ssh = new SSH2Promise({
//     host: argv[0],
//     username: argv[1],
//     password: argv[2]
// });




// ssh.exec(argv[3].toString()).then((data) => {
    
//     fs.writeFileSync('./cmd.txt', data);
//     console.log(data);
//     ssh.close();
// })

const pty = require('node-pty');
const os = require('os');
const WebSocket = require('ws');
let SSHClient = require('ssh2').Client;
var utf8 = require('utf8');
const shell = os.platform() === 'win32' ? 'powershell.exe' : 'bash';



const wss = new WebSocket.Server({port: 4001});



wss.on('connection', (ws) => {
  console.log('socket connection success');
  const ptyProcess = pty.spawn(shell, [], {
    name: 'xterm-color',
    cols: 80,
    rows: 30,
    cwd: process.env.HOME,
    env: process.env
  });
  //接受数据
  ws.on('message', (res) => {
    ptyProcess.write(res)
  });
  //发送数据
  ptyProcess.on('data', function (data) {
    process.stdout.write(data);
    ws.send(data)
  });
});


// const pty = require('node-pty');
// const os = require('os');
// const WebSocket = require('ws');
// let SSHClient = require('ssh2').Client;
// var utf8 = require('utf8');
// //const shell = os.platform() === 'win32' ? 'powershell.exe' : 'bash';



// const wss = new WebSocket.Server({port: 4002});

// function createSSHServer(machineCfg, socket) {
//   let ssh = new SSHClient();
//   let {host, username, password} = machineCfg;
//   ssh.on('ready', () => {
//     socket.emit(host + ' SSH CONNECTION!!!\n');
//     ssh.shell((err, stream) => {
//       if(err) {
//         return socket.emit('SSH SHELL err' + err.message + '\n');
//       }
//       socket.on((data) => {
//         stream.write(data);
//       });
//       stream.on('data', (data) => {
//         socket.emit(utf8.decode(data.toString('binary')));
//       }).on('close', () => {
//         ssh.end();
//       });
//     })
//   }).on('close', () => {
//     socket.emit('SSH CONNECTION CLOSED \n');
//   }).on('error', (err) => {
//     console.log(err);
//     socket.emit('SSH CONNECTION ERR: ' + err.message + '\n');
//   }).connect({
//     host: '172.21.4.154',
//     port: 22,
//     username: 'root',
//     password: 'Nibushiwo351351'
//   });
// }

// wss.on('connection', (ws) => {
//     console.log('连接建立');
//   ws.on('createSSHServer', (machineCfg) => {
//     console.log('createNewSSHServer');
//     createSSHServer(machineCfg, ws);
//   })

//   ws.on('disconnect', ()=> {
//     console.log('User disconnected');
//   });
// });


// var app = require('express')();
// //设置跨域访问
// app.all("*",function(req,res,next){
//   //设置允许跨域的域名，*代表允许任意域名跨域
//   res.header("Access-Control-Allow-Origin","*");
//   //允许的header类型
//   res.header("Access-Control-Allow-Headers","content-type");
//   //跨域允许的请求方式 
//   res.header("Access-Control-Allow-Methods","DELETE,PUT,POST,GET,OPTIONS");
//   if (req.method.toLowerCase() == 'options')
//       res.send(200);  //让options尝试请求快速结束
//   else
//       next();
// });

// var http = require('http').Server(app);
// var io = require('socket.io')(http);
// var utf8 = require('utf8');
// var SSHClient = require('ssh2').Client;
 
// function createNewServer(machineConfig, socket) {
//     var ssh = new SSHClient();
//     let {msgId, ip, username, password} = machineConfig;
//     ssh.on('ready', function () {
//         socket.emit(msgId, '\r\n***' + ip + ' SSH CONNECTION ESTABLISHED ***\r\n');
//         ssh.shell(function(err, stream) {
//             if(err) {
//                 return socket.emit(msgId, '\r\n*** SSH SHELL ERROR: ' + err.message + ' ***\r\n');
//             }
//             socket.on(msgId, function (data) {
//                 stream.write(data);
//             });
//             stream.on('data', function (d) {
//                 socket.emit(msgId, utf8.decode(d.toString('binary')));
//             }).on('close', function () {
//                 ssh.end();
//             });
//         })
//     }).on('close', function () {
//         socket.emit(msgId, '\r\n*** SSH CONNECTION CLOSED ***\r\n');
//     }).on('error', function (err) {
//         console.log(err);
//         socket.emit(msgId, '\r\n*** SSH CONNECTION ERROR: ' + err.message + ' ***\r\n');
//     }).connect({
//         host: ip,
//         port: 22,
//         username: username,
//         password: password
//     });
// }
 
 
// io.on('connection', function(socket) {
//     socket.on('createNewServer', function(machineConfig) {//新建一个ssh连接
//         console.log("createNewServer")
//         createNewServer(machineConfig, socket);
//     })
 
//     socket.on('disconnect', function(){
//         console.log('user disconnected');
//       });
// })

// http.listen(4002, function() {
//     console.log('listening on * 4002');
// })